<?php
// 支付订单模型
namespace app\common\model\Pay;

use think\Model;

class Pay extends Model
{
    protected $name = 'pay';

    // 自动写入时间戳
    protected $autoWriteTimestamp = 'integer';
    // 定义时间戳字段名
    protected $createTime = 'createtime';
    // 取消更新时间功能
    protected $updateTime = false;
    // 取消删除时间功能
    protected $autoSoftDelete = false;

    protected $append = [
        'type_text', //支付类型
        'status_text', //支付状态
        'paytime_text' //支付时间
    ];

    public function getPayType() //支付类型列表
    {
        return ['wx' => _('微信支付'), 'zfb' => _('支付宝支付')];
    }

    public function getStatusList() //支付状态列表
    {
        return ['0' => _('待支付'), '1' => _('已支付'), '2' => _('已关闭')];
    }

    public function getTypeTextAttr($value, $data) //获取支付类型文本
    {
        $value = $value ? $value : (isset($data['type']) ? $data['type'] : '');
        $list = $this->getPayType();
        return isset($list[$value]) ? $list[$value] : '';
    }

    public function getStatusTextAttr($value, $data) //获取支付状态文本
    {
        $value = $value ? $value : (isset($data['status']) ? $data['status'] : '');
        $list = $this->getStatusList();
        return isset($list[$value]) ? $list[$value] : '';
    }

    public function getPaytimeTextAttr($value, $data) //获取支付时间文本
    {
        $value = $value ? $value : (isset($data['paytime']) ? $data['paytime'] : '');
        return is_numeric($value) ? date("Y-m-d", $value) : $value;
    }

    public function setPaytimeAttr($value) //格式化时间戳，保存前处理好再插入到数据库
    {
        return $value === '' ? null : ($value && !is_numeric($value) ? strtotime($value) : $value);
    }

    public function payment($data = []) //创建支付订单
    {
        $host = request()->domain(); //获取当前本域名
        $host = trim($host, '/'); //去除域名前后的'/'

        $api = $host . '/pay/index/create'; //接口地址，收银台

        if (isset($data['jump']) && !empty($data['jump'])) //判断跳转地址是否存在
        {
            if ($data['cashier'] == 0) //判断收银台是否开启
            {
                $data['jump'] = '/' . trim($data['jump'], '/');
            } else {
                $data['jump'] = $host . '/' . trim($data['jump'], '/');
            }
        }

        if (isset($data['notice']) && !empty($data['notice'])) //判断支付失败后回调地址是否存在
        {
            $data['notice'] = $host . '/' . trim($data['notice'], '/'); //拼接回调地址
        }

        if (isset($data['third']) && !empty($data['third'])) //判断用户id是否存在
        {
            $data['third'] = json_encode($data['third']); //将用户id转成json格式
        }

        $wxcode = config('site.wxcode') ? trim(config('site.wxcode'), '/') : ''; //获取微信支付二维码地址

        if (!empty($wxcode)) //二维码不为空
        {
            $data['wxcode'] = $host . '/' . $wxcode; //拼接二维码地址
        }

        $zfbcode = config('site.zfbcode') ? trim(config('site.zfbcode'), '/') : ''; //获取支付宝支付二维码地址

        if (!empty($zfbcode)) //二维码不为空
        {
            $data['zfbcode'] = $host . '/' . $zfbcode; //拼接二维码地址
        }

        $result = HttpRequest($api, $data);

        if ($data['cashier'] == 0) {
            $result = json_decode($result, true);
        }

        return $result;

    }
}
